package conf

import (
	"flag"
	"fmt"
	"os"
	"os/exec"
	"path/filepath"
)

var (
	// 通过参数，决定是否后台启动
	Background = new(bool)
	// 配置文件地址
	ServerConfigPath string
	// 是否启用日志文件保存日志
	EnableLogFile = new(bool)
)

// 获取编译后的命令行接收参数
//	1.默认配置文件读取当前目录
//	2.默认前台启动
func InitFlag() {
	var help bool

	// 指定提示信息执行方法
	flag.Usage = usage

	// 是否后台启动，默认：-d false
	flag.BoolVar(Background, "d", false, "是否后台启动")
	// 是否后台启动，默认：-savelog false
	flag.BoolVar(EnableLogFile, "savelog", false, "是否保存日志")
	// 指定配置文件，默认：-c ./web01.yaml
	flag.StringVar(&ServerConfigPath, "c", filepath.Join(".", ServerConfig), "指定配置文件")
	// 打印帮助信息，默认：-h false
	flag.BoolVar(&help, "h", false, "打印帮助信息")

	// 将上述选项参数注册
	flag.Parse()

	if help {
		flag.Usage()
	}
}

// 重写提示信息，因为默认格式：Usage of ./file
func usage() {
	fmt.Printf("Usage of %s:\n", ServerName)
	flag.PrintDefaults()
	os.Exit(1)
}

// 根据参数决定是否后台启动
func InitBackgroundStart() {
	if *Background {
		// 启动命令的参数中，去掉 -d 选项
		args := os.Args
		for i, v := range args {
			if v == "-d" {
				args = append(args[:i], args[i+1:]...)
				// 后台启动时,保存日志
				args = append(args, "-savelog")
				break
			}
		}
		// 重新启动自己，以前台方式运行
		cmd := exec.Command(os.Args[0], args[1:]...)
		cmd.Env = os.Environ()
		if err := cmd.Start(); err != nil {
			fmt.Printf("[%s] start failed, error: %s", os.Args[0], err)
			os.Exit(1)
		}

		fmt.Printf("%s running...\n", os.Args[0])
		os.Exit(0)
	}
}
